package transactions;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import tables.Autorisation;
import tables.Groupe;
import tables.Groupe_Batiments;
/**
 * Creer un groupe de batiment puis un groupe de personne vide du meme nom et lui affecter une plage d'acces
 *
 */
public class CreerGrBatCrGrVideAssoAutorisation implements Transaction_SUPER{

	private Connection conn;
	//attributs groupe_batiments
	private String nomGroupeBat;
	//attributs autorisation
	private String libelle_plage_acces;
	
	public CreerGrBatCrGrVideAssoAutorisation(Connection conn,String nomGroupeBat, String libelle_plage_acces) {
		this.conn = conn;
		this.nomGroupeBat = nomGroupeBat;
		this.libelle_plage_acces = libelle_plage_acces;
	}

	@Override
	public void query() throws SQLException {
		try {
			conn.setAutoCommit(false);
			conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
            java.sql.Statement stat = conn.createStatement();
            
            //creation groupe batiment
            String cmd = new Groupe_Batiments(0, nomGroupeBat).insert();
            stat.executeUpdate(cmd);
            
            //creation groupe du meme nom vide
            String cmd1 = new Groupe(0, nomGroupeBat).insert();
            stat.executeUpdate(cmd1);
            
            //recuperation id_groupeBat
            ResultSet res = stat.executeQuery("SELECT SEQ_GROUPE_BATIMENTS.currval FROM dual");
			res.next();
			int id_groupeBat = res.getInt(1);
			
			//recuperation id_groupePers
			ResultSet res1 = stat.executeQuery("SELECT SEQ_ID_GROUPEPERS.currval FROM dual");
			res1.next();
			int id_groupePers = res1.getInt(1);
			
            //creer autorisation pour ce groupe
            String cmd2 = new Autorisation(id_groupeBat, id_groupePers, libelle_plage_acces).insert();
            stat.executeUpdate(cmd2);
            
            //commit
            conn.commit();
    } catch (SQLException e) {
            conn.rollback();
            e.printStackTrace();
    }
	}

}
